package com.ruoyi.bzjgl.service.impl;

import java.util.ArrayList;
import java.util.Date;
import java.util.List;

import com.ruoyi.bzjgl.domain.Bzjtable;
import com.ruoyi.bzjgl.domain.FileTable;
import com.ruoyi.bzjgl.mapper.BzjtableMapper;
import com.ruoyi.bzjgl.mapper.ForfeitureOfDepositMapper;
import com.ruoyi.bzjgl.service.IBzjtableService;
import com.ruoyi.common.core.domain.model.LoginUser;
import com.ruoyi.common.utils.SecurityUtils;
import io.swagger.models.auth.In;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;

import javax.annotation.Resource;

/**
 * 【请填写功能名称】Service业务层处理
 * 
 * @author ruoyi
 * @date 2024-01-16
 */
@Service
public class BzjtableServiceImpl implements IBzjtableService
{
    @Resource
    private BzjtableMapper bzjtableMapper;

    @Resource
    private ForfeitureOfDepositMapper forfeitureOfDepositMapper;

    /**
     * 查询【请填写功能名称】
     * 
     * @param xh 【请填写功能名称】主键
     * @return 【请填写功能名称】
     */
    @Override
    public Bzjtable selectBzjtableByXh(String xh)
    {
        Bzjtable bzjtable = bzjtableMapper.selectBzjtableByXh(xh);
        List<FileTable> fileTableList = forfeitureOfDepositMapper.selectFjByXhAndLb(xh,"收取");
        bzjtable.setFiles(fileTableList);
        return bzjtable;
    }

    /**
     * 查询【请填写功能名称】列表
     * 
     * @param bzjtable 【请填写功能名称】
     * @return 【请填写功能名称】
     */
    @Override
    public List<Bzjtable> selectBzjtableList(Bzjtable bzjtable)
    {
          return bzjtableMapper.selectBzjtableList(bzjtable);
    }


    /**
     * 新增【请填写功能名称】
     * 
     * @param bzjtable 【请填写功能名称】
     * @return 结果
     */
    @Override
    public int insertBzjtable(Bzjtable bzjtable)
    {
        int i = bzjtableMapper.insertBzjtable(bzjtable);
        if(i==1){
            LoginUser loginUser = SecurityUtils.getLoginUser();
            for (FileTable fileTable : bzjtable.getFiles()) {
                if(fileTable.getFileFirstPath()!=null&&fileTable.getFileLastPath()!=null){
                    fileTable.setXh(bzjtable.getXh());
                    fileTable.setAjbh(bzjtable.getAjbh());
                    fileTable.setLb("收取");
                    fileTable.setWjdz(fileTable.getFileFirstPath()+fileTable.getFileLastPath());
                    fileTable.setCzy(loginUser.getUsername());
                    fileTable.setCzsj(new Date());
                    fileTable.setFjmc(fileTable.getOriginalFilename());
                    fileTable.setWjlx(fileTable.getFileType());
                    forfeitureOfDepositMapper.insertFileTable(fileTable);
                }
            }
        }
        return i;
    }

    /**
     * 修改【请填写功能名称】
     * 
     * @param bzjtable 【请填写功能名称】
     * @return 结果
     */
    @Override
    public int updateBzjtable(Bzjtable bzjtable)
    {
        if(bzjtable!=null){
            if(bzjtable.getXh()!=null){
                LoginUser loginUser = SecurityUtils.getLoginUser();
                forfeitureOfDepositMapper.deleteFileByBzjXh(bzjtable.getXh(),"收取");
                for (FileTable fileTable : bzjtable.getFiles()) {
                    if(fileTable.getFileFirstPath()!=null&&fileTable.getFileLastPath()!=null){
                        fileTable.setXh(bzjtable.getXh());
                        fileTable.setAjbh(bzjtable.getAjbh());
                        fileTable.setLb("收取");
                        fileTable.setWjdz(fileTable.getFileFirstPath()+fileTable.getFileLastPath());
                        fileTable.setCzy(loginUser.getUsername());
                        fileTable.setCzsj(new Date());
                        fileTable.setFjmc(fileTable.getOriginalFilename());
                        fileTable.setWjlx(fileTable.getFileType());
                    }
                    forfeitureOfDepositMapper.insertFileTable(fileTable);
                }
                return bzjtableMapper.updateBzjtable(bzjtable);
            }
        }
        return 0;
    }

    /**
     * 批量删除【请填写功能名称】
     * 
     * @param xhs 需要删除的【请填写功能名称】主键
     * @return 结果
     */
    @Override
    public int deleteBzjtableByXhs(Integer[] xhs)
    {
        return bzjtableMapper.deleteBzjtableByXhs(xhs);
    }

    /**
     * 删除【请填写功能名称】信息
     * 
     * @param xh 【请填写功能名称】主键
     * @return 结果
     */
    @Override
    public int deleteBzjtableByXh(Integer xh)
    {
        return bzjtableMapper.deleteBzjtableByXh(xh);
    }

    @Override
    public List<Bzjtable> selectBzjHzList(Bzjtable bzjtable) {
        return bzjtableMapper.selectBzjHzList(bzjtable);
    }

    @Override
    public List<String> getDepList() {
        LoginUser loginUser = SecurityUtils.getLoginUser();
        String depName = bzjtableMapper.getDepName(loginUser.getDeptId().toString());
        List<String> list = getAllChildName(depName);
        list.add(0,depName);
        return list;
    }
    private List<String> getAllChildName(String depName){
        List<String> childNames = bzjtableMapper.getChildDepName(depName);
        if(childNames!=null){
            childNames.addAll(getChildDepName(childNames));
        }
        return childNames;
    }

    private List<String> getChildDepName(List<String> depIds){
        List<String> depChildNames = new ArrayList<>();
        for(String depId : depIds){
            List<String> childNames = bzjtableMapper.getChildDepName(depId);
            if(childNames!=null){
                childNames.addAll(getChildDepName(childNames));
                depChildNames.addAll(childNames);
            }
        }
        return depChildNames;
    }
}
